package com.cjj.controller;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.cjj.common.convention.result.Result;
import com.cjj.common.convention.result.Results;
import com.cjj.dao.entity.User;
import com.cjj.dto.req.*;
import com.cjj.dto.resp.UserListRespDTO;
import com.cjj.dto.resp.UserLoginRespDTO;
import com.cjj.service.UserService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author admin
 * @since 2025-10-25
 */
@RestController
@RequiredArgsConstructor //构造器注入
@RequestMapping("/api/user")
public class UserController {

    private final UserService userService;

    /**
    用户注册
     */
    @PostMapping("/register")
    public Result<Void> register(@Valid @RequestBody UserRegisterReqDTO registerDTO) {
        //System.out.println("收到请求");
        return userService.register(registerDTO);
    }

    /**
    用户修改
     */
    @PutMapping("/update")
    public Result<Void> userUpdate(@Valid @RequestBody UserUpdateReqDTO userUpdateReqDTO) {
        userService.updateByUserId(userUpdateReqDTO);
        return Results.success();
    }

    /**
    用户登录
     */
    @PostMapping("/login")
    public Result<UserLoginRespDTO> userLogin(@RequestBody UserLoginReqDTO userLoginReqDTO) {
        UserLoginRespDTO result = userService.login(userLoginReqDTO);
        return Results.success(result);
    }


    /**
    用户分页查询，管理员调用
     */
    @PostMapping("/list")
    public Result<IPage<UserListRespDTO>> getUserList(
            @RequestParam(defaultValue = "1") Integer pageNum,
            @RequestParam(defaultValue = "10") Integer pageSize,
            @RequestBody(required = false) UserListReqDTO userListReqDTO){

        IPage<UserListRespDTO> result = userService.getUserList(pageNum, pageSize, userListReqDTO);
        return Results.success(result);
    }



    /**
    管理员管理普通用户
     */
    @PutMapping("/status")
    public Result<Void> updateUserStatus(@Valid @RequestBody UserStatusUpdateReqDTO updateDTO) {
        userService.updateUserStatus(updateDTO);
        return Results.success();
    }

    /**
     * 根据用户id查询用户信息
     */
    @GetMapping("/userDetail")
    public Result<User> getUserDetail(@RequestParam Long userId) {
        User user = userService.getById(userId);
        return Results.success(user);
    }

}
